Functions with densely interconnected expression graphs, which arise in computer graphics applications such as flight dynamics, space-time optimization, and robotics can be difficult to efficiently differentiate using existing symbolic or automatic differentiation techniques. Derivatives are essential in many computer graphics applications, such as, for example, optimization applied to global illumination and dynamics problems, computing surface normals and curvature, and so on. Derivatives can be computed manually or by a variety of automatic techniques, such as finite differencing, automatic differentiation, or symbolic differentiation. Manual differentiation is tedious and error-prone and therefore automatic techniques are desirable for all but the simplest functions. However, functions whose expression graphs are densely interconnected, such as recursively defined functions or functions that involve sequences of matrix transformations, are difficult to efficiently differentiate using existing techniques.
Automatic differentiation and symbolic differentiation have historically been viewed as completely different methods for computing derivatives. Automatic differentiation is generally considered to be strictly a numerical technique. Both forward and reverse automatic differentiation are non-symbolic techniques independently developed by several groups in the 60s and 70s respectively. In the forward method derivatives and function values are computed together in a forward sweep through the expression graph. In the reverse method function values and partial derivatives at each node are computed in a forward sweep and then the final derivative is computed in a reverse sweep. Users generally must choose which of the two techniques to use on the entire expression graph, or whether to apply forward to some sub-graphs and reverse to others. Forward and reverse are the most widely used of all automatic differentiation algorithms. The forward method is efficient for  functions (where  is the set of real numbers) but may do n times as much work as necessary for  functions. Conversely, the reverse method is efficient for ƒ:  may do n times as much work as necessary for ƒ:  For ƒ:  both methods may do more work than necessary. In automatic differentiation numerical values of the derivative are computed for each function mode and numerical values are added and multiplied in order to compute the compete numerical values of the derivative. There is never a symbolic representation of the derivative function
Symbolic differentiation has traditionally been the domain of expensive, proprietary symbolic math systems. These systems work well for simple expressions but computation time and space grow rapidly, often exponentially, as a function of expression size, in practice frequently exceeding available memory or acceptable computation time.